package com.um2.simplexe.serveur.ui.util.controleUI.chargeur.menu;

import java.util.Vector;

import javax.swing.JMenu;
import javax.swing.JPanel;

import com.um2.simplexe.serveur.ui.exec.ToutesLesMethodesServeur;



/**
 * Un controleur de menu est une classe qui peut ajouter
 *  donner des JMenu a ajouter a une JMenuBar.
 *  y mettre des actions, ...
 *  
 *  On peut aussi specifier des actions a faire avec des actionListeners, ...
 * 
 * @author jean-marie codol
 *
 */
public interface ControleurDeMenu {

	
	/**
	 * Le nom du plugin.
	 * l'ientifiant.
	 * 
	 * @return
	 */
	public String getNomPlugin() ;
	
	/**
	 * Quelques informations sur le plugin,
	 * Presente sous forme de JPanel,
	 * l'application mettra en forme le panneau.
	 * 
	 * @return
	 */
	public JPanel getInfosPlugin() ;
	
	/**
	 * La version du plugin.
	 * pour comparer avec le serveur.
	 * 
	 * @return
	 */
	public float getVersionPlugin() ;
	
	
	/**
	 * ou trouver sur le web exactement le
	 * fichier decrivant la derniere version
	 * du plugin.
	 * (doit etre un fichier texte formatte comme cela:)
	 * -----------------------------------------------------------
	 * version:1.0                                                |
	 * url:http://code.google.com/simplexe/trunk/xxx/xxx/yyy.jar  |
	 * des commentaires , des commentaire, ...                                                        |
	 * -----------------------------------------------------------
	 * 
	 * @return
	 */
	public String getURLFichierInfoDerniereVersion();
	
	
	/**
	 * On specifie plusieurs JMenu,
	 * qu'on ajoutera a la JMenuBar.
	 * 
	 * Les actions correspondantes seront specifiees dans une autre methode.
	 * 
	 * @return
	 */
	public Vector<JMenu> ajouterALaMenuBar() ;
	
	/**
	 * les fonctions auquelles a acces ce type de plugins .
	 */
	public void setListeFonctionsDisponibles (ToutesLesMethodesServeur methodes) ;
	
	/**
	 * lors d une requette au seveur,
	 * le plugin sera invoque si la fonction
	 * est celle demandee par le client.
	 * @return la fonction
	 */
	public String getPluginFonction () ;
	
	
	
	/**
	 * Que faire lorsque le serveur recoit une requette
	 * dont la fonction demandee est celle du plugin:
	 * on appelle cette methode. 
	 * @return le resultat a renvoyer au client.
	 */
	public String executePluginFonction (String messageDuClient) ;
	
	
	
}
